from PublicReference.carry.base import *
from math import *

等级 = 100 + 5


class 职业主动技能(主动技能):
    技能施放时间 = 0.0
    脱手 = 1
    data0 = []
    data1 = []
    data2 = []
    data3 = []

    def 等效百分比(self, 武器类型):
        等效倍率 = 0.0
        if len(self.data0) >= self.等级 and len(self.data0) > 0:
            等效倍率 += self.data0[self.等级] * self.攻击次数
        if len(self.data1) >= self.等级 and len(self.data1) > 0:
            等效倍率 += self.data1[self.等级] * self.攻击次数2
        if len(self.data2) >= self.等级 and len(self.data2) > 0:
            等效倍率 += self.data2[self.等级] * self.攻击次数3
        if len(self.data3) >= self.等级 and len(self.data3) > 0:
            等效倍率 += self.data3[self.等级] * self.攻击次数4
        return 等效倍率 * (1 + self.TP成长 * self.TP等级) * self.倍率


class 技能0(被动技能):
    名称 = '单兵推进器'
    所在等级 = 15
    等级上限 = 20
    基础等级 = 10
    关联技能 = ['交叉射击', '聚合弹', '凝固汽油弹', '轻火力速射']
    关联技能2 = ['爆裂弹']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1 + (10 + self.等级) / 100, 3)

    def 加成倍率2(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1 + (2 * self.等级) / 100, 3)


class 技能1(被动技能):
    名称 = '兵器研究'
    所在等级 = 20
    等级上限 = 20
    基础等级 = 10
    冷却关联技能 = ['所有']
    非冷却关联技能 = ['EMP磁暴', '决战之日', '终解·制空霸权']

    def 加成倍率(self, 武器类型):
        return (1.1 + (self.等级 - 10) * 0.02) if self.等级 >= 10 else (1 + self.等级 * 0.01)

    def 独立攻击力倍率(self, 武器类型):
        return (1.1 + (self.等级 - 10) * 0.02) if self.等级 >= 10 else (1 + self.等级 * 0.01)

    def CD缩减倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1 - 0.01 * self.等级, 3)


class 技能2(被动技能):
    名称 = '手雷精通'
    所在等级 = 20
    等级上限 = 20
    基础等级 = 10
    关联技能 = ['G35感电手雷', 'G18冰冻手雷']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1 + 0.1 * self.等级, 3)


class 技能3(被动技能):
    名称 = '弹药改良'
    所在等级 = 20
    等级上限 = 20
    基础等级 = 10
    关联技能 = ['所有']
    技能加成描述 = ''
    加成数值 = 1.0
    关联技能2 = ['所有']

    def 加成倍率(self, 武器类型):
        return self.加成数值

    def 加成倍率2(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return 1.03 + min(10, self.等级) * 0.02 + max(0, self.等级 - 10) * 0.01

    自定义描述 = 1

    def 技能描述(self, 武器类型):
        return self.技能加成描述


class 技能4(职业主动技能):
    名称 = 'M18阔剑地雷'
    所在等级 = 20
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.132)for i in [0, 700, 771, 842, 913, 984, 1055, 1126, 1197, 1268, 1340, 1411, 1482, 1553, 1624, 1695, 1766, 1837, 1908, 1979, 2050, 2121, 2192, 2263, 2334, 2406, 2477, 2548, 2619, 2690, 2761, 2832, 2903, 2974,
                                   3045, 3116, 3187, 3258, 3329, 3400, 3471, 3543, 3614, 3685, 3756, 3827, 3898, 3969, 4040, 4111, 4182, 4253, 4324, 4395, 4466, 4537, 4609, 4680, 4751, 4822, 4893, 4964, 5035, 5106, 5177, 5248, 5319, 5390, 5461, 5532, 5603]]
    攻击次数 = 3
    CD = 6.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5


class 技能5(职业主动技能):
    名称 = 'G35感电手雷'
    所在等级 = 25
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.142*1.063)for i in [0, 540, 595, 650, 705, 760, 815, 870, 924, 979, 1034, 1089, 1144, 1199, 1254, 1308, 1363, 1418, 1473, 1528, 1583, 1637, 1692, 1747, 1802, 1857, 1912, 1967, 2021, 2076, 2131, 2186, 2241, 2296,
                                         2350, 2405, 2460, 2515, 2570, 2625, 2680, 2734, 2789, 2844, 2899, 2954, 3009, 3063, 3118, 3173, 3228, 3283, 3338, 3393, 3447, 3502, 3557, 3612, 3667, 3722, 3777, 3831, 3886, 3941, 3996, 4051, 4106, 4160, 4215, 4270, 4325]]
    攻击次数 = 1
    data1 = [0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
             14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
             14, 14, 14, 14, 14, 14, 14]
    攻击次数2 = 18
    CD = 3.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    基础释放次数 = 3

    # def 等效CD(self, 武器类型, 输出类型):
    #     # 经过测试,手雷恢复速度无法享受技能冷却恢复加成
    #     return round(self.CD, 1)


class 技能6(职业主动技能):
    名称 = '交叉射击'
    所在等级 = 25
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.153)for i in [0, 1329, 1463, 1598, 1733, 1868, 2003, 2138, 2272, 2407, 2542, 2677, 2812, 2947, 3081, 3216, 3351, 3486, 3621, 3756, 3890, 4025, 4160, 4295, 4430, 4565, 4699, 4834, 4969, 5104, 5239, 5374, 5508, 5643,
                                   5778, 5913, 6048, 6183, 6317, 6452, 6587, 6722, 6857, 6992, 7126, 7261, 7396, 7531, 7666, 7801, 7935, 8070, 8205, 8340, 8475, 8610, 8744, 8879, 9014, 9149, 9284, 9419, 9553, 9688, 9823, 9958, 10093, 10228, 10362, 10497, 10632]]
    攻击次数 = 3
    CD = 8.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5


class 技能7(职业主动技能):
    名称 = '爆裂弹'
    所在等级 = 30
    等级上限 = 20
    基础等级 = 10
    data0 = [int(i*1.157)for i in [0, 662, 768, 873, 978, 1084, 1189, 1294, 1400,
                                   1506, 1611, 1717, 1822, 1927, 2033, 2138, 2244, 2350, 2455, 2561, 2666]]
    攻击次数 = 1
    CD = 5.0


class 技能8(职业主动技能):
    名称 = 'G18冰冻手雷'
    所在等级 = 30
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.115*1.076)for i in [0, 666, 733, 801, 869, 936, 1004, 1071, 1139, 1207, 1274, 1342, 1409, 1477, 1545, 1612, 1680, 1747, 1815, 1883, 1950, 2018, 2085, 2153, 2220, 2288, 2356, 2423, 2491, 2558, 2626, 2694, 2761,
                                         2829, 2896, 2964, 3032, 3099, 3167, 3234, 3302, 3370, 3437, 3505, 3572, 3640, 3708, 3775, 3843, 3910, 3978, 4046, 4113, 4181, 4248, 4316, 4384, 4451, 4519, 4586, 4654, 4722, 4789, 4857, 4924, 4992, 5060, 5127, 5195, 5262, 5330]]
    攻击次数 = 1
    基础释放次数 = 3
    CD = 4.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5

    # def 等效CD(self, 武器类型, 输出类型):
    #     # 经过测试,手雷恢复速度无法享受技能冷却恢复加成
    #     return round(self.CD, 1)


class 技能9(职业主动技能):
    名称 = '聚合弹'
    所在等级 = 35
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.216)for i in [0, 8804, 9698, 10591, 11484, 12377, 13271, 14164, 15057, 15951, 16844, 17737, 18630, 19524, 20417, 21310, 22203, 23097, 23990, 24883, 25776, 26670, 27563, 28456, 29349, 30243, 31136, 32029, 32922, 33816, 34709, 35602, 36495, 37389,
                                   38282, 39175, 40068, 40962, 41855, 42748, 43641, 44535, 45428, 46321, 47215, 48108, 49001, 49894, 50788, 51681, 52574, 53467, 54361, 55254, 56147, 57040, 57934, 58827, 59720, 60613, 61507, 62400, 63293, 64186, 65080, 65973, 66866, 67759, 68653, 69546, 70439]]
    攻击次数 = 1
    CD = 18.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5


class 技能10(职业主动技能):
    名称 = 'C4飞弹'
    所在等级 = 35
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.151)for i in [0, 8305, 9148, 9990, 10833, 11676, 12518, 13361, 14203, 15046, 15889, 16731, 17574, 18416, 19259, 20102, 20944, 21787, 22629, 23472, 24315, 25157, 26000, 26842, 27685, 28528, 29370, 30213, 31055, 31898, 32741, 33583, 34426, 35268,
                                   36111, 36954, 37796, 38639, 39481, 40324, 41167, 42009, 42852, 43694, 44537, 45380, 46222, 47065, 47907, 48750, 49593, 50435, 51278, 52120, 52963, 53806, 54648, 55491, 56333, 57176, 58019, 58861, 59704, 60546, 61389, 62232, 63074, 63917, 64759, 65602, 66445]]
    攻击次数 = 1
    CD = 20.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [i * 1.16 for i in self.data0]
        elif 类型 == 1:
            self.data0 = [i * 1.25 for i in self.data0]


class 技能11(职业主动技能):
    名称 = '凝固汽油弹'
    所在等级 = 40
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.204)for i in [0, 9616, 10591, 11566, 12541, 13518, 14493, 15468, 16444, 17420, 18395, 19370, 20345, 21322, 22297, 23272, 24248, 25224, 26199, 27174, 28150, 29125, 30101, 31076, 32052, 33027, 34003, 34979, 35954, 36929, 37905, 38880, 39856, 40831,
                                   41806, 42783, 43758, 44733, 45710, 46685, 47660, 48635, 49610, 50587, 51562, 52537, 53513, 54489, 55464, 56439, 57414, 58391, 59366, 60341, 61317, 62292, 63268, 64244, 65219, 66194, 67170, 68145, 69121, 70096, 71072, 72048, 73023, 73998, 74973, 75949, 76925]]
    攻击次数 = 1
    data1 = [int(i*1.204)for i in [0, 50, 53, 59, 63, 69, 73, 79, 83, 89, 93, 98, 104, 108, 114, 118, 124, 128, 134, 137, 143, 148, 153, 159, 163, 169, 173, 178, 182, 188, 193, 198, 203, 208,
                                   214, 218, 223, 227, 233, 238, 243, 248, 253, 258, 262, 268, 273, 278, 283, 288, 293, 298, 302, 307, 312, 318, 323, 328, 333, 338, 343, 347, 352, 357, 363, 367, 373, 378, 383, 387, 392]]
    攻击次数2 = 15
    CD = 20.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [x * 1.31 for x in self.data0]
            self.攻击次数2 = 0
            self.CD *= 0.94
        elif 类型 == 1:
            self.data0 = [x * 1.40 for x in self.data0]
            self.攻击次数2 = 0
            self.CD *= 0.94


class 技能12(职业主动技能):
    名称 = '镭射狙击'
    所在等级 = 45
    等级上限 = 60
    学习间隔 = 2
    等级精通 = 50

    data0 = [int(i*1.161*1.056)for i in [0, 3351, 3691, 4031, 4371, 4711, 5051, 5391, 5731, 6071, 6411, 6752, 7092, 7432, 7772, 8112, 8452, 8792, 9132, 9472, 9812, 10152, 10492, 10832, 11172, 11512, 11852, 12192, 12532, 12872, 13212, 13552, 13892, 14232, 14572,
                                         14912, 15252, 15592, 15932, 16272, 16612, 16952, 17292, 17632, 17973, 18313, 18653, 18993, 19333, 19673, 20013, 20353, 20693, 21033, 21373, 21713, 22053, 22393, 22733, 23073, 23413, 23753, 24093, 24433, 24773, 25113, 25453, 25793, 26133, 26473, 26813]]
    攻击次数 = 5
    CD = 45.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [x * 0.26 for x in self.data0]
            self.攻击次数 = 24
            self.技能施放时间 = 3.0
        elif 类型 == 1:
            self.data0 = [x * 0.28 for x in self.data0]
            self.攻击次数 = 24
            self.技能施放时间 = 3.0


class 技能13(被动技能):
    名称 = '弹药强化'
    所在等级 = 48
    等级上限 = 40
    基础等级 = 20
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        return 1.105 + self.等级 * 0.015 if self.等级 > 0 else 1


class 技能14(职业主动技能):
    名称 = 'EMP磁暴'
    所在等级 = 50
    等级上限 = 40
    学习间隔 = 5
    等级精通 = 30

    data0 = [int(i*1.232)for i in [0, 11718, 14435, 17152, 19870, 22587, 25304, 28021, 30739, 33456, 36173, 38891, 41608, 44325, 47042, 49760, 52477, 55194, 57912, 60629, 63346, 66063, 68781, 71498, 74215, 76932, 79650, 82367, 85084, 87802, 90519, 93236, 95953, 98671, 101388, 104105,
                                   106823, 109540, 112257, 114974, 117692, 120409, 123126, 125844, 128561, 131278, 133995, 136713, 139430, 142147, 144864, 147582, 150299, 153016, 155734, 158451, 161168, 163885, 166603, 169320, 172037, 174755, 177472, 180189, 182906, 185624, 188341, 191058, 193776, 196493, 199210]]
    攻击次数 = 3
    data1 = [int(i*1.232)for i in [0, 585, 721, 857, 993, 1129, 1265, 1401, 1536, 1672, 1808, 1944, 2080, 2216, 2352, 2488, 2623, 2759, 2895, 3031, 3167, 3303, 3439, 3574, 3710, 3846, 3982, 4118, 4254, 4390, 4525, 4661, 4797, 4933,
                                   5069, 5205, 5341, 5477, 5612, 5748, 5884, 6020, 6156, 6292, 6428, 6563, 6699, 6835, 6971, 7107, 7243, 7379, 7514, 7650, 7786, 7922, 8058, 8194, 8330, 8466, 8601, 8737, 8873, 9009, 9145, 9281, 9417, 9552, 9688, 9824, 9960]]
    攻击次数2 = 20
    CD = 145.0


class 技能15(职业主动技能):
    名称 = 'G61重力手雷'
    所在等级 = 60
    等级上限 = 40
    学习间隔 = 2
    等级精通 = 30

    data0 = [int(i*1.166*1.054)for i in [0, 6165, 6791, 7417, 8042, 8668, 9293, 9919, 10544, 11170, 11795, 12421, 13046, 13672, 14297, 14923, 15549, 16174, 16800, 17425, 18051, 18676, 19302, 19927, 20553, 21178, 21804, 22429, 23055, 23680, 24306, 24932, 25557, 26183,
                                         26808, 27434, 28059, 28685, 29310, 29936, 30561, 31187, 31812, 32438, 33063, 33689, 34315, 34940, 35566, 36191, 36817, 37442, 38068, 38693, 39319, 39944, 40570, 41195, 41821, 42446, 43072, 43698, 44323, 44949, 45574, 46200, 46825, 47451, 48076, 48702, 49327]]
    攻击次数 = 1
    data1 = [int(i*1.166*1.054)for i in [0, 205, 226, 247, 268, 288, 309, 330, 351, 372, 393, 414, 434, 455, 476, 497, 518, 539, 560, 580, 601, 622, 643, 664, 685, 705, 726, 747, 768, 789, 810, 831, 851, 872, 893,
                                         914, 935, 956, 977, 997, 1018, 1039, 1060, 1081, 1102, 1122, 1143, 1164, 1185, 1206, 1227, 1248, 1268, 1289, 1310, 1331, 1352, 1373, 1394, 1414, 1435, 1456, 1477, 1498, 1519, 1540, 1560, 1581, 1602, 1623, 1644]]
    攻击次数2 = 29
    CD = 20.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    技能施放时间 = 3
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [x * 2.16 for x in self.data0]
            self.技能施放时间 = 0.5
            self.攻击次数2 = 5
        elif 类型 == 1:
            self.data0 = [x * 2.34 for x in self.data0]
            self.技能施放时间 = 0.5
            self.攻击次数2 = 5


class 技能16(职业主动技能):
    名称 = '轻火力速射'
    脱手 = 0
    所在等级 = 70
    等级上限 = 40
    学习间隔 = 2
    等级精通 = 30

    data0 = [int(i*1.16)for i in [0, 1233, 1359, 1484, 1609, 1734, 1859, 1984, 2110, 2235, 2360, 2485, 2610, 2735, 2861, 2986, 3111, 3236, 3361, 3486, 3612, 3737, 3862, 3987, 4112, 4237, 4363, 4488, 4613, 4738, 4863, 4989, 5114, 5239,
                                  5364, 5489, 5614, 5740, 5865, 5990, 6115, 6240, 6365, 6491, 6616, 6741, 6866, 6991, 7116, 7242, 7367, 7492, 7617, 7742, 7867, 7993, 8118, 8243, 8368, 8493, 8618, 8744, 8869, 8994, 9119, 9244, 9370, 9495, 9620, 9745, 9870]]
    攻击次数 = 17
    CD = 30.0
    TP成长 = 0.10
    TP基础 = 5
    TP上限 = 5
    技能施放时间 = 1
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data1 = [x * 0.6 for x in self.data0]
            self.技能施放时间 = 1.5
            self.攻击次数2 = 6
            self.CD *= 0.95
        elif 类型 == 1:
            self.data1 = [x * 0.82 for x in self.data0]
            self.技能施放时间 = 1.5
            self.攻击次数2 = 6
            self.CD *= 0.95


class 技能17(被动技能):
    名称 = '制空掌握'
    所在等级 = 75
    等级上限 = 30
    基础等级 = 11
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 3)


class 技能18(职业主动技能):
    名称 = '开火'
    所在等级 = 75
    等级上限 = 40
    学习间隔 = 2
    等级精通 = 30

    data0 = [int(i*1.139*1.052)for i in [0, 8299, 9141, 9982, 10824, 11666, 12508, 13350, 14192, 15034, 15876, 16718, 17560, 18402, 19244, 20086, 20928, 21770, 22612, 23453, 24295, 25137, 25979, 26821, 27663, 28505, 29347, 30189, 31031, 31873, 32715, 33557, 34399, 35241,
                                         36082, 36924, 37766, 38608, 39450, 40292, 41134, 41976, 42818, 43660, 44502, 45344, 46186, 47028, 47870, 48712, 49553, 50395, 51237, 52079, 52921, 53763, 54605, 55447, 56289, 57131, 57973, 58815, 59657, 60499, 61341, 62183, 63024, 63866, 64708, 65550, 66392]]
    攻击次数 = 6
    CD = 45.0
    脱手 = 0
    技能施放时间 = 1
    是否有护石 = 1
    护石选项 = ['圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [x * 1.35 for x in self.data0]


class 技能19(职业主动技能):
    名称 = 'G96热压手雷'
    所在等级 = 80
    等级上限 = 40
    学习间隔 = 2
    等级精通 = 30

    data0 = [int(i*1.146*1.132)for i in [0, 42837, 47183, 51529, 55874, 60220, 64566, 68912, 73258, 77604, 81949, 86295, 90641, 94987, 99333, 103679, 108024, 112370, 116716, 121062, 125408, 129754, 134099, 138445, 142791, 147137, 151483, 155829, 160174, 164520, 168866, 173212, 177558, 181904, 186249,
                                         190595, 194941, 199287, 203633, 207979, 212324, 216670, 221016, 225362, 229708, 234054, 238399, 242745, 247091, 251437, 255783, 260129, 264474, 268820, 273166, 277512, 281858, 286204, 290549, 294895, 299241, 303587, 307933, 312279, 316624, 320970, 325316, 329662, 334008, 338354, 342699]]
    攻击次数 = 1
    CD = 45.0
    是否有护石 = 1
    护石选项 = ['圣痕']

    def 装备护石(self, 类型):
        if 类型 == 0:
            self.data0 = [x * 1.29 for x in self.data0]
            self.CD *= 0.9


class 技能20(职业主动技能):
    名称 = '决战之日'
    所在等级 = 85
    等级上限 = 40
    学习间隔 = 5
    等级精通 = 30
    技能施放时间 = 5

    data0 = [int(i*1.182)for i in [0, 3284, 4046, 4808, 5570, 6331, 7093, 7855, 8616, 9378, 10140, 10902, 11663, 12425, 13187, 13949, 14710, 15472, 16234, 16995, 17757, 18519, 19281, 20042, 20804, 21566, 22328, 23089, 23851, 24613, 25374, 26136, 26898, 27660, 28421,
                                   29183, 29945, 30706, 31468, 32230, 32992, 33753, 34515, 35277, 36039, 36800, 37562, 38324, 39085, 39847, 40609, 41371, 42132, 42894, 43656, 44417, 45179, 45941, 46703, 47464, 48226, 48988, 49750, 50511, 51273, 52035, 52796, 53558, 54320, 55082, 55843]]
    攻击次数 = 40
    CD = 180.0


class 技能21(被动技能):
    名称 = '单兵推进器-02X'
    所在等级 = 95
    等级上限 = 40
    学习间隔 = 3
    等级精通 = 30

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)


class 技能22(职业主动技能):
    名称 = '空袭战略'
    所在等级 = 95
    等级上限 = 40
    学习间隔 = 2
    等级精通 = 10
    # 脱手 = 1
    # 技能施放时间 = 3
    持续时间 = 6

    CD = 60.0
    # 毛雷
    data0 = [int(i*1.152*1.075)for i in [0, 12509, 13778, 15047, 16316, 17585, 18854, 20123, 21392, 22661, 23930, 25199, 26468, 27737, 29006, 30275, 31544, 32814, 34083, 35352, 36621, 37890, 39159, 40428, 41697, 42966, 44235, 45504, 46773, 48042, 49311, 50580, 51849, 53118,
                                         54387, 55656, 56926, 58195, 59464, 60733, 62002, 63271, 64540, 65809, 67078, 68347, 69616, 70885, 72154, 73423, 74692, 75961, 77230, 78499, 79768, 81037, 82307, 83576, 84845, 86114, 87383, 88652, 89921, 91190, 92459, 93728, 94997, 96266, 97535, 98804, 100073]]
    攻击次数 = 6
    # # 电雷
    # data1 = [0,223,246,268,291,314,337,360,383,406,429,452,475,498,521,544,567,590,613,636,659]
    # 攻击次数2 = 40*3
    # # 冰雷
    # data2 = [0,446,492,537,582,628,674,720,766,812,858,904,950,996,1042,1088,1134,1180,1226,1272,1318]
    # 攻击次数3 = 20*3
    # 终结
    data1 = [int(i*1.152)for i in [0, 32166, 35429, 38693, 41956, 45219, 48482, 51746, 55009, 58272, 61536, 64799, 68062, 71325, 74589, 77852, 81115, 84378, 87642, 90905, 94168, 97432, 100695, 103958, 107221, 110485, 113748, 117011, 120274, 123538, 126801, 130064, 133328, 136591, 139854,
                                   143117, 146381, 149644, 152907, 156170, 159434, 162697, 165960, 169224, 172487, 175750, 179013, 182277, 185540, 188803, 192067, 195330, 198593, 201856, 205120, 208383, 211646, 214909, 218173, 221436, 224699, 227963, 231226, 234489, 237752, 241016, 244279, 247542, 250805, 254069, 257332]]
    攻击次数2 = 1


class 技能23(职业主动技能):
    名称 = '终解·制空霸权'
    所在等级 = 100
    等级上限 = 40
    学习间隔 = 5
    等级精通 = 30

    关联技能 = ['无']
    CD = 290.0
    脱手 = 0
    技能施放时间 = 6.8
    data0 = [int(i*1.23)for i in [0, 17492, 21548, 25604, 29660, 33716, 37773, 41829, 45885, 49941, 53997, 58054, 62110, 66166, 70222, 74278, 78334, 82391, 86447, 90503, 94559, 98615, 102671, 106728, 110784, 114840, 118896, 122952, 127009, 131065, 135121, 139177, 143233, 147289, 151346, 155402,
                                  159458, 163514, 167570, 171626, 175683, 179739, 183795, 187851, 191907, 195963, 200020, 204076, 208132, 212188, 216244, 220301, 224357, 228413, 232469, 236525, 240581, 244638, 248694, 252750, 256806, 260862, 264918, 268975, 273031, 277087, 281143, 285199, 289256, 293312, 297368]]
    攻击次数 = 7
    data1 = [int(i*1.23)for i in [0, 57141, 70391, 83641, 96891, 110142, 123392, 136642, 149892, 163142, 176392, 189643, 202893, 216143, 229393, 242643, 255893, 269144, 282394, 295644, 308894, 322144, 335395, 348645, 361895, 375145, 388395, 401645, 414896, 428146, 441396, 454646, 467896, 481146,
                                  494397, 507647, 520897, 534147, 547397, 560648, 573898, 587148, 600398, 613648, 626898, 640149, 653399, 666649, 679899, 693149, 706399, 719650, 732900, 746150, 759400, 772650, 785900, 799151, 812401, 825651, 838901, 852151, 865402, 878652, 891902, 905152, 918402, 931652, 944903, 958153, 971403]]
    攻击次数2 = 5

    def 加成倍率(self, 武器类型):
        return 0.0


技能列表 = []
i = 0
while i >= 0:
    try:
        tem = eval('技能'+str(i)+'()')
        tem.基础等级计算()
        技能列表.append(tem)
        i += 1
    except:
        i = -1


class 职业属性(角色属性):
    实际名称 = '重霄·弹药专家·女'
    角色 = '神枪手(女)'
    职业 = '弹药专家'

    武器选项 = ['手弩', '步枪']

    类型选择 = ['魔法固伤', '物理固伤']

    类型 = '魔法固伤'
    防具类型 = '皮甲'
    防具精通属性 = ['智力', '力量']

    超负荷属性 = 0

    主BUFF = 1.84

    远古记忆 = 0

    打桩模式 = 0

    补给输出形态选择 = 0

    # 守门人四属强 = [0,0,0,0]

    def __init__(self, 技能列表, 技能序号):
        基础属性输入(self)
        self.技能栏 = deepcopy(技能列表)
        self.技能序号 = deepcopy(技能序号)

    def 技能释放次数计算(self):
        技能释放次数 = []
        技能消耗时间 = 0.0
        爆裂弹间隔 = 0.115
        每轮空射次数 = 12 + floor(0.5 * min(self.技能栏[self.技能序号['单兵推进器']].等级, 20))
        每轮时间 = 爆裂弹间隔 * 每轮空射次数 + 1.05
        # 最大不脱手时间 = 0.0

        反应时间 = 0.0
        释放时间系数 = 0.0
        起落地时间 = 0.0
        CD延迟 = 0.0

        if(self.打桩模式 == 0):
            反应时间 = 1.5
            释放时间系数 = 1.0
            起落地时间 = 1.5
            CD延迟 = 0.0

        elif(self.打桩模式 == 1):
            反应时间 = 0.0
            释放时间系数 = 0.0
            起落地时间 = 1.0
            CD延迟 = 0.0

        elif(self.打桩模式 == 2):
            反应时间 = 3.0
            释放时间系数 = 2.0
            起落地时间 = 3.0
            CD延迟 = 2.0

        if (self.武器类型 != '手弩'):
            爆裂弹间隔 = 0.14
            每轮空射次数 = 4 + floor(0.5 * min(self.技能栏[self.技能序号['单兵推进器']].等级, 20))
            每轮时间 = 爆裂弹间隔 * 每轮空射次数 + 起落地时间

        爆裂弹位置 = self.技能序号['爆裂弹']

        最大不脱手时间 = 0
        for i in self.技能栏:
            if i.是否有伤害 == 1 and i.脱手 != 1 and i.技能施放时间 > 最大不脱手时间 and self.次数输入[self.技能序号[i.名称]]:
                最大不脱手时间 = i.技能施放时间 + 0.5
        # print(最大不脱手时间)

        for i in self.技能栏:
            if i.是否有伤害 == 1:
                if i.名称 == '爆裂弹':
                    技能释放次数.append(0)
                else:
                    if '/CD' in self.次数输入[self.技能序号[i.名称]]:
                        # 根据技能CD及最大不脱手时间得到技能空转的时间
                        最终CD = i.等效CD(self.武器类型, self.类型)
                        空转时间 = 0
                        if 最终CD < 最大不脱手时间:
                            空转时间 = 最大不脱手时间 - 最终CD
                        # 计算不脱手时间
                        # 技能无法释放次数 = int(最大不脱手时间/(i.等效CD(self.武器类型,self.类型)))
                        # print(技能无法释放次数)
                        # print(最大不脱手时间)
                        # print(int((self.时间输入 - 反应时间-最大不脱手时间) / (i.等效CD(self.武器类型,self.类型) + i.技能施放时间*释放时间系数 + CD延迟) + 1 + i.基础释放次数))
                        # print(技能无法释放次数)
                        技能次数 = max(0, int((self.时间输入 - 反应时间 - 空转时间) /
                                          (最终CD + i.技能施放时间*释放时间系数 + CD延迟) + 1 + i.基础释放次数))
                        技能释放次数.append(技能次数)
                        # 技能释放次数.append(int((self.时间输入 - 反应时间) / (i.等效CD(self.武器类型) + i.技能施放时间*释放时间系数 + CD延迟) + 1 + i.基础释放次数))
                        if i.脱手 == 1:
                            技能消耗时间 += 技能次数 * 0.12 * 释放时间系数
                        else:
                            技能消耗时间 += 技能次数 * i.技能施放时间*释放时间系数
                    elif self.次数输入[self.技能序号[i.名称]] != '0':
                        技能释放次数.append(
                            round(float(self.次数输入[self.技能序号[i.名称]]), 2))
                        if i.脱手 == 1:
                            技能消耗时间 += int(self.次数输入[self.技能序号[i.名称]]
                                          ) * 0.12 * 释放时间系数
                        else:
                            技能消耗时间 += int(self.次数输入[self.技能序号[i.名称]]
                                          ) * i.技能施放时间 * 释放时间系数
                    else:
                        技能释放次数.append(0)
            else:
                技能释放次数.append(0)

        # 填补补给占用时间，补给期间选择丢雷暂时不考虑空射
        # 追加补给选择丢雷对子弹的输出时间的影响
        # 技能消耗时间 += self.技能栏[self.技能序号['空袭战略']].持续时间() if self.补给输出形态选择 == 0 else 0
        # print(补给占用时间)
        if '/CD' in self.次数输入[self.技能序号['爆裂弹']]:
            技能释放次数[爆裂弹位置] = max(
                int(floor((self.时间输入 - 技能消耗时间) / 每轮时间) * 每轮空射次数), 0)
            技能释放次数[爆裂弹位置] += max(floor((self.时间输入 - 技能消耗时间 - 每轮时间 *
                                        floor((self.时间输入 - 技能消耗时间) / 每轮时间) - 起落地时间/2) / 爆裂弹间隔), 0)
        else:
            技能释放次数[爆裂弹位置] = int(float(self.次数输入[self.技能序号['爆裂弹']]) * 每轮空射次数)

        return self.技能释放次数解析(技能释放次数)

    def 预处理(self):
        if self.超负荷属性 == 0:
            self.技能栏[self.技能序号['弹药改良']].加成数值 = 1.1
            self.技能栏[self.技能序号['弹药改良']].自定义描述 = 0
        if self.超负荷属性 == 1:
            self.技能栏[self.技能序号['弹药改良']].技能加成描述 = '火属性强化增加：36'
            self.火属性强化 += 36
        if self.超负荷属性 == 2:
            self.技能栏[self.技能序号['弹药改良']].技能加成描述 = '冰属性强化增加：36'
            self.冰属性强化 += 36
        if self.超负荷属性 == 3:
            self.技能栏[self.技能序号['弹药改良']].技能加成描述 = '光属性强化增加：36'
            self.光属性强化 += 36
        super().预处理()


class 重霄·弹药专家·女(角色窗口):
    def 窗口属性输入(self):
        技能序号 = dict()
        for i in range(len(技能列表)):
            技能序号[技能列表[i].名称] = i

        一觉序号 = 0
        二觉序号 = 0
        三觉序号 = 0

        for i in 技能列表:
            if i.所在等级 == 50:
                一觉序号 = 技能序号[i.名称]
            if i.所在等级 == 85:
                二觉序号 = 技能序号[i.名称]
            if i.所在等级 == 100:
                三觉序号 = 技能序号[i.名称]

        护石选项 = ['无']
        for i in 技能列表:
            if i.是否有伤害 == 1 and i.是否有护石 == 1:
                护石选项.append(i.名称)

        符文选项 = ['无']
        for i in 技能列表:
            if i.所在等级 >= 20 and i.所在等级 <= 80 and i.所在等级 != 50 and i.是否有伤害 == 1 and i.名称 != '爆裂弹':
                符文选项.append(i.名称)
        self.初始属性 = 职业属性(技能列表, 技能序号)
        self.角色属性A = 职业属性(技能列表, 技能序号)
        self.角色属性B = 职业属性(技能列表, 技能序号)
        self.一觉序号 = 一觉序号
        self.二觉序号 = 二觉序号
        self.三觉序号 = 三觉序号
        self.护石选项 = deepcopy(护石选项)
        self.符文选项 = deepcopy(符文选项)

    def 界面2(self):
        super().界面2()

        self.超负荷属性选择 = MyQComboBox(self.main_frame2)
        self.超负荷属性选择.addItems(['超负荷装填：无', '超负荷装填：火', '超负荷装填：冰', '超负荷装填：光'])
        self.超负荷属性选择.resize(120, 20)
        self.超负荷属性选择.move(325, 420)

        # self.补给输出形态选择=MyQComboBox(self.main_frame2)
        # self.补给输出形态选择.addItems(['输出丢雷','爆发丢技能'])
        # self.补给输出形态选择.resize(120,20)
        # self.补给输出形态选择.move(325,450)

        self.打桩模式 = MyQComboBox(self.main_frame2)
        y = QLabel("打桩模式：", self.main_frame2)
        y.move(500, self.height() - 63)
        y.resize(70, 20)
        y.setStyleSheet(标签样式)
        self.打桩模式.addItems(['常规打桩', '桩逼模式', '手残模式'])
        self.打桩模式.move(570, self.height() - 63)
        self.打桩模式.resize(80, 20)

        self.职业存档.append(('超负荷属性选择', self.超负荷属性选择, 1))
        self.职业存档.append(('打桩模式', self.打桩模式, 1))

    def 输入属性(self, 属性, x=0):
        super().输入属性(属性, x)
        属性.打桩模式 = self.打桩模式.currentIndex()
        属性.超负荷属性 = self.超负荷属性选择.currentIndex()
        # 属性.补给输出形态选择 = self.补给输出形态选择.currentIndex()
